package com.genentech.bioinformatics.mobi;
/*
 * Class by Jeff Milton, except where otherwise noted.
 */
import java.util.ArrayList;

import android.app.Activity;
import android.content.Context;
import android.database.MergeCursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Point;
import android.os.Bundle;
//import android.view.MotioneventonEvent;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.DigitalClock;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.TextView;

public class CanvasDrawingActivity extends Activity {
	private ArrayList<Path> _graphics = new ArrayList<Path>();
	private Paint mPaint;
	private Bitmap backdrop = null;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView ( R.layout.main);
/*		FrameLayout ll = new FrameLayout ( this );
		ll.addView(new AnnotatePanel(this), LayoutParams.FILL_PARENT);
		DigitalClock tt = new DigitalClock(this);
		tt.setText("Hello World");
		tt.setTextColor(Color.WHITE);
		tt.setWidth(399);
		tt.setHeight(400);
		ll.addView(tt, LayoutParams.FILL_PARENT);
		ListView ls = new ListView ( this );
		setContentView(ll);*/
		mPaint = new Paint();
		mPaint.setDither(true);
		mPaint.setColor(0xFFFFFF00);
		mPaint.setStyle(Paint.Style.STROKE);
		mPaint.setStrokeJoin(Paint.Join.ROUND);
		mPaint.setStrokeCap(Paint.Cap.ROUND);
		mPaint.setStrokeWidth(2);

	}
/*
	 class DrawingPanel extends SurfaceView implements SurfaceHolder.Callback
	 {
	 private DrawingThread _thread;
	 private Path path;
	 private Bitmap _overlay = null;
	 private Point my_point = new Point ( 0, 0);
	
	 public DrawingPanel(Context context) {
	 super(context);
	 getHolder().addCallback(this);
	 _thread = new DrawingThread(getHolder(), this);
	 Bitmap test_image = BitmapFactory.decodeResource(context.getResources(),
	 R.drawable.ball);
	 backdrop = BitmapFactory.decodeResource(context.getResources(),
	 R.drawable.wood);
	 _overlay = test_image;
	
	 }
	
	 @Override
	 public boolean onTouchEvent(MotionEvent event) {
	 synchronized (_thread.getSurfaceHolder()) {
	 my_point.set((int)event.getX(), (int)event.getY());
	
	 if (event.getAction() == MotionEvent.ACTION_DOWN) {
	 path = new Path();
	 path.moveTo(event.getX(), event.getY());
	 path.lineTo(event.getX(), event.getY());
	 } else if (event.getAction() == MotionEvent.ACTION_MOVE) {
	 path.lineTo(event.getX(), event.getY());
	 } else if (event.getAction() == MotionEvent.ACTION_UP) {
	 path.lineTo(event.getX(), event.getY());
	 _graphics.add(path);
	 }
	
	 return true;
	 }
	 }
	
	 @Override
	 public void onDraw(Canvas canvas) {
	
	
	 canvas.drawColor(Color.BLUE);
	 if ( backdrop != null )
	 canvas.drawBitmap(backdrop, 0, 0, mPaint);
	 if (path != null && mPaint != null)
	 canvas.drawPath(path, mPaint);
	 for (Path path : _graphics) {
	 // canvas.drawPoint(graphic.x, graphic.y, mPaint);
	 canvas.drawPath(path, mPaint);
	 }
	 if ( _overlay != null )
	 {
	 // canvas.drawBitmap(_overlay,
	 // my_point.x - _overlay.getWidth() / 2,
	 // my_point.y - _overlay.getHeight() / 2, null);
	 }
	 }
	
	 public void surfaceChanged(SurfaceHolder holder, int format, int width,
	 int height) {
	 // TODO Auto-generated method stub
	
	 }
	
	 public void surfaceCreated(SurfaceHolder holder) {
	 // TODO Auto-generated method stub
	 _thread.setRunning(true);
	 _thread.start();
	 }
	
	 public void surfaceDestroyed(SurfaceHolder holder) {
	 // TODO Auto-generated method stub
	 boolean retry = true;
	 _thread.setRunning(false);
	 while (retry) {
	 try {
	 _thread.join();
	 retry = false;
	 } catch (InterruptedException e) {
	 // we will try it again and again...
	 }
	 }
	 }
	 }

	 class DrawingThread extends Thread {
	 private SurfaceHolder _surfaceHolder;
	 private DrawingPanel _panel;
	 private boolean _run = false;
	
	 public DrawingThread(SurfaceHolder surfaceHolder, DrawingPanel panel) {
	 _surfaceHolder = surfaceHolder;
	 _panel = panel;
	 }
	
	 public void setRunning(boolean run) {
	 _run = run;
	 }
	
	 public SurfaceHolder getSurfaceHolder() {
	 return _surfaceHolder;
	 }
	
	 @Override
	 public void run() {
	 Canvas c;
	 while (_run) {
	 c = null;
	 try {
	 c = _surfaceHolder.lockCanvas(null);
	 synchronized (_surfaceHolder) {
	 _panel.onDraw(c);
	 }
	 } finally {
	 // do this in a finally so that if an exception is thrown
	 // during the above, we don't leave the Surface in an
	 // inconsistent state
	 if (c != null) {
	 _surfaceHolder.unlockCanvasAndPost(c);
	 }
	 }
	 }
	 }
	 }*/

}
